/*-------------------------------------------------------------------------
 *
 * stratnum.h
 *      POSTGRES strategy number definitions.
 *
 *
 * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/access/stratnum.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef STRATNUM_H
#define STRATNUM_H

/*
 * Strategy numbers identify the semantics that particular operators have
 * with respect to particular operator classes.  In some cases a strategy
 * subtype (an OID) is used as further information.
 */
typedef uint16 StrategyNumber;

#define InvalidStrategy ((StrategyNumber) 0)

/*
 * Strategy numbers for B-tree indexes.
 */
#define BTLessStrategyNumber            1
#define BTLessEqualStrategyNumber        2
#define BTEqualStrategyNumber            3
#define BTGreaterEqualStrategyNumber    4
#define BTGreaterStrategyNumber            5

#define BTMaxStrategyNumber                5


/*
 * Strategy numbers common to (some) GiST, SP-GiST and BRIN opclasses.
 *
 * The first few of these come from the R-Tree indexing method (hence the
 * names); the others have been added over time as they have been needed.
 */
#define RTLeftStrategyNumber            1    /* for << */
#define RTOverLeftStrategyNumber        2    /* for &< */
#define RTOverlapStrategyNumber            3    /* for && */
#define RTOverRightStrategyNumber        4    /* for &> */
#define RTRightStrategyNumber            5    /* for >> */
#define RTSameStrategyNumber            6    /* for ~= */
#define RTContainsStrategyNumber        7    /* for @> */
#define RTContainedByStrategyNumber        8    /* for <@ */
#define RTOverBelowStrategyNumber        9    /* for &<| */
#define RTBelowStrategyNumber            10    /* for <<| */
#define RTAboveStrategyNumber            11    /* for |>> */
#define RTOverAboveStrategyNumber        12    /* for |&> */
#define RTOldContainsStrategyNumber        13    /* for old spelling of @> */
#define RTOldContainedByStrategyNumber    14    /* for old spelling of <@ */
#define RTKNNSearchStrategyNumber        15    /* for <-> (distance) */
#define RTContainsElemStrategyNumber    16    /* for range types @> elem */
#define RTAdjacentStrategyNumber        17    /* for -|- */
#define RTEqualStrategyNumber            18    /* for = */
#define RTNotEqualStrategyNumber        19    /* for != */
#define RTLessStrategyNumber            20    /* for < */
#define RTLessEqualStrategyNumber        21    /* for <= */
#define RTGreaterStrategyNumber            22    /* for > */
#define RTGreaterEqualStrategyNumber    23    /* for >= */
#define RTSubStrategyNumber                24    /* for inet >> */
#define RTSubEqualStrategyNumber        25    /* for inet <<= */
#define RTSuperStrategyNumber            26    /* for inet << */
#define RTSuperEqualStrategyNumber        27    /* for inet >>= */

#define RTMaxStrategyNumber                27


#endif                            /* STRATNUM_H */
